package main

import "fmt"

func main() {
	/*
		匿名结构体和匿名字段：

		匿名结构体：没有名字的结构体，
			在创建匿名结构体时，同时创建对象
			变量名 := struct {
				定义字段 Field
			}{
				字段进行赋值
			}

		匿名字段：一个结构体的字段没有字段名
			必须是命名类型或者命名类型的指针
				命名类型：字段名默认为类型名
				命名类型的指针：字段名默认为指针指向的类型名
			因此，一个结构体里不能同时有某一类型及其指针类型的匿名字段（避免造成重名，是字段名不唯一）

		匿名函数：
	*/
	s1 := Student{"张三", 18}
	fmt.Println(s1.name, s1.age)

	//匿名函数
	func() {
		fmt.Println("Hello World!")
	}() //直接就调用了

	//匿名结构体
	s2 := struct {
		name string
		age  int
	}{
		"李四",
		19,
	}
	fmt.Println(s2) //{李四 19}

	w1 := Worker{"王舞", 17}
	fmt.Println(w1)
	fmt.Println(w1.string)
	fmt.Println(w1.int)
}

type Worker struct {
	//name string
	//age string
	string //匿名字段
	int    //匿名字段，默认使用数据类型作为名字，那么匿名字段的类型就不能重复，否则会冲突
}

type Student struct {
	name string
	age  int
}
